#include "MyMap.hpp"
#include "MySet.hpp"
#include<vector>

//void test_RBTree()
//{
//	yiwei::RBTree<int, int> t;
//	int n = 10000;
//	//srand(time(0));
//	std::vector<int> v;
//	v.reserve(n);
//	for (int i = 0; i < n; i++)
//	{
//		v.push_back(rand());
//	}
//
//	size_t begin = clock();
//	for (auto e : v)
//	{
//		t.Insert(std::make_pair(e, e));
//	}
//	size_t end = clock();
//	std::cout << end - begin << std::endl;
//
//	std::cout << t.IsValidRBTree() << std::endl;
//}

void test_map()
{
		yiwei::map<int, int> m;
		m.insert(std::make_pair(5, 5));
		m.insert(std::make_pair(2, 2));
		m.insert(std::make_pair(3, 3));
		m.insert(std::make_pair(4, 4));
		m.insert(std::make_pair(7, 7));

		yiwei::map<int, int>::iterator it = m.begin();
		while (it != m.end())
		{
			std::cout << it->first << ":" << it->second << std::endl;
			++it;
		}

}

void test_map1()
{
	int n = 10000;
	srand(time(0));
	std::vector<int> v;
	v.reserve(n);
	for (int i = 0; i < n; i++)
	{
		v.push_back(rand());
	}

	yiwei::map<int, int> m;
	for (auto e : v)
	{
		m.insert(std::make_pair(e, e));
	}
	std::cout << m.IsValidRBTree() << std::endl;

	for (auto e : v)
	{
		yiwei::map<int, int>::iterator pos = m.find(e);
		if (e == 11538)
		{
			int i = 0;
		}
		m.erase(pos);
		bool flag = m.IsValidRBTree();
		std::cout << flag << std::endl;
		if (flag == false)
			break;
	}
}



void test_set()
{
	yiwei::set<int> s;
	s.insert(3);
	s.insert(1);
	s.insert(2);
	s.insert(5);
	s.insert(3);

	yiwei::set<int>::iterator it = s.begin();
	while (it != s.end())
	{
		std::cout << *it << " ";
		++it;
	}
	std::cout << std::endl;
}

void test_set1()
{
	int n = 10000;
	srand(time(0));
	std::vector<int> v;
	v.reserve(n);
	for (int i = 0; i < n; i++)
	{
		v.push_back(rand());
	}

	yiwei::set<int> s;
	for (auto e : v)
	{
		s.insert(e);
	}
	std::cout << s.IsValidRBTree() << std::endl;

	for (auto e : v)
	{
		yiwei::set<int>::iterator pos = s.find(e);
		if (e == 11538)
		{
			int i = 0;
		}
		s.erase(pos);
		bool flag = s.IsValidRBTree();
		std::cout << flag << std::endl;
		if (flag == false)
			break;
	}
}

int main()
{
	//test_RBTree();
	//test_map();
	//test_set();
	test_map1();
	//test_set1();
	return 0;
}